#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
修复快乐8历史数据文件
"""

import pandas as pd
import os

def fix_kl8_data():
    """修复快乐8历史数据文件"""
    print("🔧 开始修复快乐8历史数据文件")
    print("=" * 50)
    
    try:
        # 文件路径
        data_file = os.path.join(os.path.dirname(__file__), 'scripts', 'kl8', 'kl8_history.csv')
        
        if not os.path.exists(data_file):
            print("❌ 数据文件不存在")
            return
            
        # 读取数据
        print("📄 读取数据文件...")
        df = pd.read_csv(data_file, encoding='utf-8')
        print(f"✅ 成功加载数据，共 {len(df)} 行")
        
        # 检查列数
        print(f"📊 原始数据形状: {df.shape}")
        
        # 修复日期格式问题 - 移除日期中的星期信息
        print("📅 修复日期格式...")
        df['开奖日期'] = df['开奖日期'].astype(str).str.replace(r'\(.*\)', '', regex=True)
        
        # 检查是否有重复的期号
        print("🔍 检查重复期号...")
        duplicate_issues = df['开奖期号'].duplicated(keep=False)
        if duplicate_issues.any():
            print(f"⚠️  发现 {duplicate_issues.sum()} 个重复期号")
            # 显示重复的期号
            duplicates = df[df['开奖期号'].duplicated(keep=False)]
            print("重复期号详情:")
            for idx, row in duplicates.iterrows():
                print(f"  期号: {row['开奖期号']}, 日期: {row['开奖日期']}")
            
            # 删除重复行，保留最后一行
            original_count = len(df)
            df = df.drop_duplicates(subset=['开奖期号'], keep='last')
            print(f"✅ 删除了 {original_count - len(df)} 个重复行")
        else:
            print("✅ 未发现重复期号")
        
        # 检查每行是否有正确的22列
        print("📋 检查列数一致性...")
        # 重新读取并检查每一行的列数
        with open(data_file, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        
        fixed_lines = []
        fixed_count = 0
        
        for i, line in enumerate(lines):
            # 分割行并检查列数
            columns = line.strip().split(',')
            if len(columns) != 22:
                print(f"⚠️  第 {i+1} 行列数不正确: {len(columns)} 列")
                # 尝试修复 - 如果列数过多，只取前22列
                if len(columns) > 22:
                    columns = columns[:22]
                    fixed_lines.append(','.join(columns) + '\n')
                    fixed_count += 1
                else:
                    # 列数过少，跳过该行
                    print(f"   跳过第 {i+1} 行（列数过少）")
            else:
                fixed_lines.append(line)
        
        if fixed_count > 0:
            print(f"✅ 修复了 {fixed_count} 行列数问题")
        
        # 保存修复后的数据
        print("💾 保存修复后的数据...")
        with open(data_file, 'w', encoding='utf-8', newline='') as f:
            f.writelines(fixed_lines)
        
        # 重新加载数据验证
        print("✅ 重新加载数据验证...")
        df_fixed = pd.read_csv(data_file, encoding='utf-8')
        print(f"📊 修复后数据形状: {df_fixed.shape}")
        
        # 检查是否还有列数不一致的问题
        with open(data_file, 'r', encoding='utf-8') as f:
            lines = f.readlines()
        
        inconsistent_lines = []
        for i, line in enumerate(lines):
            columns = line.strip().split(',')
            if len(columns) != 22:
                inconsistent_lines.append((i+1, len(columns)))
        
        if inconsistent_lines:
            print("❌ 仍然存在列数不一致的行:")
            for line_num, col_count in inconsistent_lines:
                print(f"   第 {line_num} 行: {col_count} 列")
        else:
            print("✅ 所有行都具有正确的22列")
        
        print("\n🏁 数据修复完成!")
        
    except Exception as e:
        print(f"❌ 修复失败: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    fix_kl8_data()